
// 新增的文件管理工具类
import 'dart:io';

import 'package:path_provider/path_provider.dart';



class FileManager {
  // 列出目录下的所有文件和子目录
  static Future<List<FileSystemEntity>> listFilesInDir(String dirPath) async {
    final dir = Directory(dirPath);

    if (!await dir.exists()) {
      // print("目录不存在");
      return [];
    }

    // 列出目录中的所有文件和子目录
    List<FileSystemEntity> entities = await dir.list().toList();
    return entities;
  }

  // 删除文件或目录
  static Future<void> deleteFileOrDir(String path) async {
    final fileOrDir = FileSystemEntity.typeSync(path);

    if (fileOrDir == FileSystemEntityType.file) {
      final file = File(path);
      if (await file.exists()) {
        await file.delete();
        // print('文件已删除: $path');
      } else {
        // print('文件不存在: $path');
      }
    } else if (fileOrDir == FileSystemEntityType.directory) {
      final dir = Directory(path);
      if (await dir.exists()) {
        await dir.delete(recursive: true);
        // print('目录已删除: $path');
      } else {
        // print('目录不存在: $path');
      }
    } else {
      // print('路径既不是文件也不是目录: $path');
    }
  }

  // 重命名文件或目录
  static Future<void> renameFileOrDir(String oldPath, String newPath) async {
    final fileOrDir = FileSystemEntity.typeSync(oldPath);

    if (fileOrDir == FileSystemEntityType.file) {
      final file = File(oldPath);
      if (await file.exists()) {
        await file.rename(newPath);
        // print('文件已重命名: $oldPath -> $newPath');
      } else {
        // print('文件不存在: $oldPath');
      }
    } else if (fileOrDir == FileSystemEntityType.directory) {
      final dir = Directory(oldPath);
      if (await dir.exists()) {
        await dir.rename(newPath);
        // print('目录已重命名: $oldPath -> $newPath');
      } else {
        // print('目录不存在: $oldPath');
      }
    } else {
      // print('路径既不是文件也不是目录: $oldPath');
    }
  }

  // 获取文件类型
  static String getType(FileSystemEntity entity) {
    if (entity is File) {
      return '文件';
    } else if (entity is Directory) {
      return '目录';
    } else {
      return '未知';
    }
  }

  static Future<String> getAppDownloadPath(String examId) async {
    // getApplicationDocumentsDirectory
    // getDownloadsDirectory
    // getApplicationDocumentsDirectory //ios
    if(Platform.isIOS){
      // Directory? appDocDir = await getLibraryDirectory();
      Directory appDocDir = await getApplicationDocumentsDirectory();
      String path = '${appDocDir.path}/video/$examId';
      Directory(path).createSync(recursive: true);
      return path;
    }else{
      Directory? appDocDir = await getExternalStorageDirectory();

      String path = '${appDocDir!.path}/video/$examId';
      Directory(path).createSync(recursive: true);
      return path;
    }
  }
  bool isPathWritable(String path) {
    try {
      final dir = Directory(path);
      if (!dir.existsSync()) {
        dir.createSync(recursive: true);
      }
      return dir.existsSync();
    } catch (e) {
      print("路径不可写: $e");
      return false;
    }
  }
}

// // 文件系统实体类型的扩展
// extension FileSystemEntityExtension on FileSystemEntity {
//   static FileSystemEntityType typeOfEntity(String path) {
//     final fileOrDir = FileSystemEntity.typeSync(path);
//     return fileOrDir;
//   }
// }


